home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / regist / vberrhnd.bas < prev   
BASIC Source File  |  1995-03-06  |  9KB  |  282 lines

  1. Option Explicit
  2.  
  3. Global Const VB_LNG_FRENCH = 1
  4. Global Const VB_LNG_DUTCH = 2
  5. Global Const VB_LNG_GERMAN = 3
  6. Global Const VB_LNG_ENGLISH = 4
  7. Global Const VB_LNG_ITALIAN = 5
  8. Global Const VB_LNG_SPANISH = 6
  9.  
  10. Const MB_MESSAGE_LEFT = 0
  11.  
  12. Declare Sub cPushID Lib "vbhnderr.dll" (IDArray As Integer, ByVal nID As Integer)
  13. Declare Sub cPopID Lib "vbhnderr.dll" (IDArray As Integer, ByVal nID As Integer)
  14. Declare Sub cPopLastID Lib "vbhnderr.dll" (IDArray As Integer)
  15. Declare Function cGetID Lib "vbhnderr.dll" (IDArray As Integer, ByVal nPosition As Integer) As Integer
  16. Declare Sub cClearID Lib "vbhnderr.dll" (IDArray As Integer)
  17. Declare Sub cChangeChars Lib "vbhnderr.dll" (Txt As String, charSet As String, newCharSet As String)
  18. Declare Function cGetIni Lib "vbhnderr.dll" (ByVal AppName As String, ByVal szItem As String, ByVal szDefault As String, ByVal InitFile As String) As String
  19. Declare Function cGetWindowsDirectory Lib "vbhnderr.dll" () As String
  20. Declare Function cInsertBlocks Lib "vbhnderr.dll" (Txt As String, Insert As String) As String
  21. Declare Function cLngMsgBox Lib "vbhnderr.dll" (ByVal nLanguage As Integer, ByVal Message As String, ByVal Button As Long, ByVal Title As String) As Integer
  22.  
  23. 'Don't change any variables and their value below
  24.  
  25. Const ID_ITEMS = 16
  26.  
  27. Type HNDERRtype
  28.    ModuleName                       As String * 12
  29.    RoutineHandle                    As String * 4
  30.    RoutineName                      As String * 82
  31.    CrLf                             As String * 2
  32. End Type
  33.  
  34. Dim FileLNG                         As String
  35.  
  36. Dim FileHND                         As String
  37.  
  38. Dim FileLOG                         As String
  39.  
  40. Dim IDArray(0 To ID_ITEMS)          As Integer
  41.  
  42. Dim Language                        As Integer
  43. Dim AutoLog                         As Integer
  44. Dim WaitingTimeForReaction          As Integer
  45. Dim DefaultButton                   As Integer
  46.  
  47. Dim HNDERR                          As HNDERRtype
  48.  
  49. Sub mcClearID ()
  50.    Call cClearID(IDArray(0))
  51. End Sub
  52.  
  53. Function mcGetID (nPos As Integer)
  54.    mcGetID = cGetID(IDArray(0), nPos)
  55. End Function
  56.  
  57. Function mcGetLanguageID (LanguageID As Integer) As String
  58.  
  59.    Dim RetLanguage      As String
  60.  
  61.    Select Case LanguageID
  62.       Case VB_LNG_FRENCH
  63.          RetLanguage = "VFR"
  64.       Case VB_LNG_DUTCH
  65.          RetLanguage = "VNL"
  66.       Case VB_LNG_GERMAN
  67.          RetLanguage = "VDE"
  68.       Case VB_LNG_ENGLISH
  69.          RetLanguage = "VUK"
  70.       Case VB_LNG_ITALIAN
  71.          RetLanguage = "VIT"
  72.       Case VB_LNG_SPANISH
  73.          RetLanguage = "VSP"
  74.       Case Else
  75.          RetLanguage = "VUK"
  76.    End Select
  77.    
  78.    If (LanguageID > 0) Then
  79.       Language = LanguageID
  80.    Else
  81.       Language = VB_LNG_ENGLISH
  82.    End If
  83.  
  84.    mcGetLanguageID = RetLanguage
  85.  
  86. End Function
  87.  
  88. Function mcIDErrorHandler (nErr As Integer) As Integer
  89.  
  90.    ' check if this a correct Error passed
  91.    If (nErr = 0) Then
  92.       'if no, resume next
  93.       mcIDErrorHandler = True
  94.       Exit Function
  95.    End If
  96.  
  97.    Dim RoutineCount     As Integer
  98.    Dim RoutineNumber    As Integer
  99.    Dim RoutineStack     As String
  100.    Dim TotalRoutines    As Integer
  101.    Dim BlankLines       As Integer
  102.    Dim Chan             As Integer
  103.    Dim StopExit         As Integer
  104.    Dim TimeOut          As Long
  105.    Dim ButtonsConfig    As Integer
  106.    Dim ErrorTitle       As String
  107.  
  108.    '  some initializations
  109.    RoutineStack = ""
  110.    TotalRoutines = 0
  111.    BlankLines = 0
  112.    StopExit = False
  113.    ButtonsConfig = 0
  114.    ErrorTitle = ""
  115.    RoutineStack = RoutineStack + mcReadText("0", "")
  116.    
  117.    ' find the next valid unused file number.
  118.    Chan = FreeFile
  119.  
  120.    ' open the file with the definition of each routines (file must be in the WINDOWS directory)
  121.    Close #Chan
  122.    Open FileHND For Random Shared As #Chan Len = Len(HNDERR)
  123.  
  124.    ' get the stack of the routines
  125.    For RoutineCount = 0 To ID_ITEMS
  126.       ' get the number of the routine
  127.       RoutineNumber = mcGetID(RoutineCount)
  128.       ' if there a valid routine number
  129.       If (RoutineNumber > 0) Then
  130.          ' yes, read the definition of the routine
  131.          Get #Chan, RoutineNumber, HNDERR
  132.          ' form the stack of the routines founden to display
  133.          RoutineStack = RoutineStack + HNDERR.ModuleName + Chr$(9) + HNDERR.RoutineHandle + Chr$(9) + Trim$(HNDERR.RoutineName) + Chr$(13)
  134.          ' count the routines to display
  135.          TotalRoutines = TotalRoutines + 1
  136.       Else
  137.          ' no, exit from reading the stack
  138.          Exit For
  139.       End If
  140.    Next RoutineCount
  141.  
  142.    ' close the open file
  143.    Close #Chan
  144.  
  145.    ' check if the default button must be activated
  146.    If (DefaultButton = True) Then
  147.       ' yes, RETRY and CANCEL with RETRY is the default
  148.       ButtonsConfig = 5 Or 0
  149.    Else
  150.       ' no, RETRY and CANCEL with CANCEL is the default
  151.       ButtonsConfig = 5 Or 256
  152.       ' yes, add text for RETRY after timeout or action
  153.       RoutineStack = RoutineStack & Chr$(13) & Chr$(13) & "program will be stopped"
  154.    End If
  155.  
  156.    ' set the error title
  157.    ErrorTitle = mcReadText("1", nErr & "~" & Error$(nErr))
  158.  
  159.    ' check if one routine has been founded
  160.    If (Len(RoutineStack) > 0) Then
  161.       ' check the time out
  162.       TimeOut = WaitingTimeForReaction * (163840 Or 524288)
  163.       ' display remaining blank lines
  164.       BlankLines = (8 - TotalRoutines) - (TimeOut = 0)
  165.       For RoutineCount = 0 To BlankLines
  166.          RoutineStack = RoutineStack + Chr$(13)
  167.       Next RoutineCount
  168.       ' add some text for management
  169.       RoutineStack = RoutineStack & mcReadText("2", "")
  170.       ' check if a timeout must be used
  171.       If (TimeOut <> 0) Then
  172.          ' yes, add text depending of the default button
  173.          RoutineStack = RoutineStack & mcReadText("3", "") & " "
  174.          ' if default is RETRY then display 'continue' else 'stop'
  175.          If (DefaultButton = True) Then
  176.             RoutineStack = RoutineStack & mcReadText("4", "")
  177.          Else
  178.             RoutineStack = RoutineStack & mcReadText("5", "")
  179.          End If
  180.       End If
  181.       ' display the error message box
  182.       StopExit = (cLngMsgBox(Language, RoutineStack, MB_MESSAGE_LEFT Or TimeOut Or ButtonsConfig Or 16, ErrorTitle) = 2)
  183.       ' yield process
  184.       DoEvents
  185.    End If
  186.  
  187.    ' check if an auto logging must be performed
  188.    If (AutoLog = True) Then
  189.  
  190.       ' open the logging file in append mode
  191.       Close #Chan
  192.       Open FileLOG For Append Shared As #Chan
  193.  
  194.       ' save the error and his description
  195.       Print #Chan, ErrorTitle; " "; mcReadText("6", Date$ & "~" & Time$)
  196.       Print #Chan, ""
  197.       ' save the full stack name of each routines founden
  198.       Print #Chan, RoutineStack
  199.       Print #Chan, ""
  200.       ' check if the CANCEL button pushed or TimeOut
  201.       If (StopExit = True) Then
  202.          ' yes stop by operator, save text for CANCEL
  203.          Print #Chan, mcReadText("7", "")
  204.       Else
  205.          ' no, retry by operator, save text for RETRY
  206.          Print #Chan, mcReadText("8", "")
  207.       End If
  208.       ' save separator
  209.       Print #Chan, String$(78, "-")
  210.  
  211.       ' close the file
  212.       Close #Chan
  213.  
  214.    End If
  215.  
  216.    ' if stop the program the END the application
  217.    If (StopExit = True) Then End
  218.  
  219.    ' no stop, resumes to next line in the main application
  220.    mcIDErrorHandler = True
  221.  
  222. End Function
  223.  
  224. Sub mcPopID (ID As Integer)
  225.    Call cPopID(IDArray(0), ID)
  226. End Sub
  227.  
  228. Sub mcPopLastID ()
  229.    Call cPopLastID(IDArray(0))
  230. End Sub
  231.  
  232. Sub mcPushID (ID As Integer)
  233.    Call cPushID(IDArray(0), ID)
  234. End Sub
  235.  
  236. Function mcReadText (TextOrder As String, InsertText As String) As String
  237.  
  238.    Dim Tmp              As String
  239.    Dim BasisText        As String
  240.  
  241.    ' read the text in the language file
  242.    BasisText = cGetIni("VBHNDERR", TextOrder, "?", FileLNG)
  243.    
  244.    ' insert some text if any
  245.    Tmp = cInsertBlocks(BasisText, InsertText)
  246.  
  247.    ' change all º by a CR and all ú by TAB
  248.    Call cChangeChars(Tmp, "ºú", Chr$(13) + Chr$(9))
  249.  
  250.    mcReadText = Tmp
  251.  
  252. End Function
  253.  
  254. Sub mcInitID (mcLanguage As Integer, mcAutoLog As Integer, mcWaitingTimeForReaction As Integer, mcDefaultButton As Integer)
  255.  
  256.